Введение

Manticore Search — это высокопроизводительная многосхрановая база данных, специально созданная для поиска и аналитики, предлагающая молниеносный полнотекстовый поиск, индексирование в реальном времени и расширенные функции, такие как векторный поиск и колонковое хранение для эффективного анализа данных. Разработанная для работы как с малыми, так и с большими наборами данных, она обеспечивает бесшовную масштабируемость и мощные аналитические возможности для современных приложений.

Как база данных с открытым исходным кодом (доступна на GitHub), Manticore Search была создана в 2017 году как продолжение движка Sphinx Search. Наша команда разработчиков взяла все лучшие функции Sphinx и значительно улучшила его функциональность, исправив сотни ошибок по пути (подробности в нашем Changelog). Manticore Search — это современная, быстрая и легковесная база данных с исключительными возможностями полнотекстового поиска, построенная на почти полном переписывании своего предшественника.

Ключевые особенности Manticore:

Мощный и быстрый полнотекстовый поиск, хорошо работающий как с малыми, так и с большими наборами данных

Возможности векторного поиска

Manticore Search поддерживает возможность добавления эмбеддингов, сгенерированных вашими моделями машинного обучения, к каждому документу, а затем выполнения поиска ближайших соседей по ним. Это позволяет создавать функции, такие как поиск по сходству, рекомендации, семантический поиск и ранжирование релевантности на основе алгоритмов обработки естественного языка, а также поиск по изображениям, видео и звуку.

JOIN

Manticore Search поддерживает JOIN запросы через SQL и JSON, позволяя объединять данные из нескольких таблиц.

Многопоточность

Manticore Search использует умную параллелизацию запросов для снижения времени отклика и полного использования всех ядер процессора при необходимости.

Оптимизатор запросов на основе стоимости

Оптимизатор запросов на основе стоимости использует статистические данные об индексированных данных для оценки относительных затрат различных планов выполнения для данного запроса. Это позволяет оптимизатору определить наиболее эффективный план для получения нужных результатов, учитывая такие факторы, как размер индексированных данных, сложность запроса и доступные ресурсы.

Варианты хранения

Manticore предлагает как построчное, так и колонковое хранение для работы с наборами данных различных размеров. Традиционный и по умолчанию используемый построчный вариант хранения доступен для наборов данных любого размера — малых, средних и больших, в то время как колонковое хранение предоставляется через Manticore Columnar Library для еще больших наборов данных. Ключевое отличие этих вариантов хранения в том, что построчное хранение требует, чтобы все атрибуты (за исключением полнотекстовых полей) хранились в оперативной памяти для оптимальной производительности, тогда как колонковое хранение этого не требует, что обеспечивает меньшее потребление ОЗУ, но с потенциально немного более медленной производительностью (что демонстрируют статистические данные на https://db-benchmarks.com/).

Автоматические вторичные индексы

Manticore Columnar Library использует индекс Piecewise Geometric Model, который использует обученную взаимосвязь между индексируемыми ключами и их расположением в памяти. Компактность этого отображения, в сочетании с особенностями рекурсивного алгоритма построения, делает PGM-индекс структурой данных, которая превосходит традиционные индексы по объему памяти на порядки, при этом обеспечивая лучшее время выполнения запросов и обновлений. Вторичные индексы включены по умолчанию для всех числовых и строковых полей и могут быть включены для json-атрибутов.

SQL в первую очередь

Родной синтаксис Manticore — SQL, и он поддерживает SQL через HTTP и протокол MySQL, что позволяет подключаться через популярные mysql-клиенты на любом языке программирования.

JSON через HTTP

Для более программного подхода к управлению данными и схемами Manticore предоставляет протокол HTTP JSON, аналогичный Elasticsearch.

Записи, совместимые с Elasticsearch

Вы можете выполнять совместимые с Elasticsearch insert и replace JSON-запросы, что позволяет использовать Manticore с такими инструментами, как Logstash (версия < 7.13), Filebeat и другими инструментами из семейства Beats.

Декларативное и императивное управление схемами

Легко создавать, обновлять и удалять таблицы онлайн или через конфигурационный файл.

Преимущества C++ и удобство PHP

Демон Manticore Search разработан на C++, обеспечивая быстрое время запуска и эффективное использование памяти. Оптимизации на низком уровне дополнительно повышают производительность. Другой важный компонент, называемый Manticore Buddy, написан на PHP и используется для функциональности высокого уровня, которая не требует молниеносного времени отклика или чрезвычайно высокой вычислительной мощности. Хотя внесение изменений в код на C++ может быть сложной задачей, добавление новой SQL/JSON команды с использованием Manticore Buddy должно быть простым процессом.

Вставки в реальном времени

Новые или обновленные документы можно сразу же читать.

Интерактивные курсы для легкого обучения

Мы предлагаем бесплатные интерактивные курсы, чтобы обучение было простым.

Транзакции

Хотя Manticore не полностью соответствует стандарту ACID, он поддерживает изолированные транзакции для атомарных изменений и бинарное логирование для безопасной записи.

Встроенная репликация и балансировка нагрузки

Данные могут распределяться между серверами и дата-центрами, при этом любой узел Manticore Search может выступать как балансировщиком нагрузки, так и узлом данных. Manticore реализует практически синхронную мульти-мастер репликацию с использованием библиотеки Galera, обеспечивая согласованность данных на всех узлах, предотвращая потерю данных и обеспечивая исключительную производительность репликации.

Встроенные возможности резервного копирования

Manticore оснащен внешним инструментом manticore-backup и SQL-командой BACKUP для упрощения процесса резервного копирования и восстановления данных. В качестве альтернативы можно использовать mysqldump для создания логических резервных копий.

Готовая синхронизация данных

Инструмент indexer и обширный синтаксис конфигурации Manticore упрощают синхронизацию данных из источников, таких как MySQL, PostgreSQL, базы данных, совместимые с ODBC, XML и CSV.

Варианты интеграции

Вы можете интегрировать Manticore Search с сервером MySQL/MariaDB, используя FEDERATED engine или через ProxySQL.

Вы можете использовать Apache Superset и Grafana для визуализации данных, хранящихся в Manticore. Для интерактивной разработки запросов Manticore можно использовать различные инструменты MySQL, такие как HeidiSQL и DBForge.

Также можно использовать Manticore Search с Kibana.

Упрощенная фильтрация потоков

Manticore предлагает специальный тип таблиц — "percolate", который позволяет искать запросы вместо данных, что делает его эффективным инструментом для фильтрации полнотекстовых потоков данных. Просто сохраните ваши запросы в таблице, обрабатывайте поток данных, отправляя каждую партию документов в Manticore Search, и получайте только результаты, соответствующие вашим сохраненным запросам.

Возможные применения

Manticore Search универсален и может применяться в различных сценариях, включая:

  • Полнотекстовый поиск:

    • Идеально подходит для платформ электронной коммерции, обеспечивая быстрый и точный поиск товаров с такими функциями, как автозаполнение и нечеткий поиск.
    • Отлично подходит для сайтов с большим количеством контента, позволяя пользователям быстро находить релевантные статьи или документы.
  • Аналитика данных:

    • Загружайте данные в Manticore Search с помощью Beats/Logstash, Vector.dev, Fluentbit.
    • Эффективно анализируйте большие наборы данных с помощью колоннарного хранения и OLAP-возможностей Manticore.
    • Выполняйте сложные запросы по терабайтам данных с минимальной задержкой.
    • Визуализируйте данные с помощью Kibana, Grafana или Apache Superset.
  • Фасетный поиск:

    • Позвольте пользователям фильтровать результаты поиска по категориям, таким как цена, бренд или дата, для более точного поиска.
  • Геопространственный поиск:

    • Реализуйте поиск по местоположению, например, поиск ближайших ресторанов или магазинов, используя геопространственные возможности Manticore.
  • Коррекция орфографии:

    • Автоматически исправляйте опечатки пользователей в поисковых запросах для повышения точности поиска и удобства использования.
  • Автозаполнение:

    • Предлагайте подсказки в реальном времени по мере ввода пользователями, улучшая удобство и скорость поиска.
  • Фильтрация потоков данных:

    • Используйте percolate таблицы для фильтрации и обработки потоков данных в реальном времени, таких как ленты социальных сетей или данные журналов, эффективно.

Требования

  • Архитектура: arm64 или x86_64
  • ОС: на базе Debian (например, Debian, Ubuntu, Mint), на базе RHEL (например, RHEL, CentOS, Alma, Oracle Linux, Amazon Linux), Windows или MacOS.
  • Manticore Columnar Library, которая обеспечивает колоннарное хранение и вторичные индексы, требует процессор с SSE >= 4.2.
  • Нет специфических требований к дисковому пространству или оперативной памяти. Пустой экземпляр Manticore Search использует около 40 МБ RSS RAM.